"""
【练习】英雄游戏
1. 定义一个英雄类，此英雄类需要包含 姓名、 血量、 攻击力、 还需要有一个方法为讲台词。
2. 根据英雄类，实例化不同的英雄对象。
3. 每个英雄需要在实例化的时候，就有自己的姓名、攻击力、血量
4.每个英雄的血量不可以直接被获取或者修改
5. 现在除了英雄类，还有一种类是法师类。
   1. 法师类继承于 Hero 类。 1. 法师类多了魔力的属性 1. 法师类多了一个放技能的方法。
6. 定义战士类。
   1. 战士类继承于Hero类。 1. 战士的会多一个护甲的属性。 1. 战士在初始化的时候需要多传入一个护甲信息

7. 定义一个单独的 fight 函数。
   1. 在打斗之前，需要两个英雄先讲出台词。
   1. 这个fight函数要求实现两个英雄的多轮回合制对打功能。最后需要返回一个赢家。
   1. 创建一个测试用例文件，导入被测函数，并对它完成单元测试
"""


class Hero:

    def __init__(self, name, blood, skill):
        self.name = name
        self.blood = blood
        self.skill = skill

    def speak(self):
        print(f'欢迎来到英雄联盟,我的名字是{self.name},血量为{self.blood},攻击力是{self.skill}')


class Master(Hero):
    def __init__(self, name, blood, skill, magic):
        super().__init__(name, blood, skill)
        self.magic = magic

    def put_skill(self):
        if self.blood <= 20:
            print('血量不足')
        else:
            self.blood -= 30


class Soldier(Hero):
    def __init__(self, name, blood, skill, armor):
        super().__init__(name, blood, skill)
        self.armor = armor


def fight(hero1: Master, hero2: Soldier):
    hero1.speak()
    hero2.speak()
    hero1_name = hero1.name
    hero2_name = hero2.name
    hero1_blood = hero1.blood
    hero2_blood = hero2.blood
    while True:
        hero1_blood -= 10
        hero2_blood -= 10

        if hero1_blood <= 0 or hero2_blood <= 0:
            if hero1_blood > hero2_blood:
                print(f"英雄{hero1_name}赢了")
                return hero1_name
            elif hero1_blood < hero2_blood:
                print(f"英雄{hero2_name}赢了")
                return hero2_name
            else:
                return '双方打成平手'


if __name__ == '__main__':
    hero1 = Master('程咬金',700,'锤子','加速')
    hero2 = Soldier('李白',120,'扇子', '漂移')

    print(fight(hero1, hero2))






